package com.qx.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.qx.dao.ModulesDao;
import com.qx.entity.Modules;
import com.qx.service.ModulesService;
import com.qx.util.Tree;

@Service
public class ModulesImpl implements ModulesService {

	@Autowired
	ModulesDao mdao;
	
	/**
	 * 查询所有模块的树状结构数据
	 */
//	public List<Tree> GetAllModules() {//作废：在实体类里利用自连接产生一对多关系 。使用方法
//		List<Modules> mlist = mdao.findByParentidIsNull();
//		List<Tree> list = TreeJson(mlist);
//		return list;
//	}
//	public List<Tree> TreeJson(List<Modules> mlist){//新建方法方便使用递归
//		List<Tree> list = new ArrayList<Tree>();
//		for (Modules m : mlist) {
//			Tree t = new Tree();
//			t.setId(m.getId());
//			t.setTitle(m.getName());
//			t.setField(m.getParentid());
//			t.setPath(m.getPath());
//			t.setWeight(m.getWeight());
//			t.setChildren(TreeJson(m.getMlist()));//使用递归将查出来的数据改为需要的数据化
//			list.add(t);
//		}
//		return list;
//	}
	public List<Tree> GetTreeAll() {
		List<Tree> list = new ArrayList<Tree>();
		List<Modules> mlist = mdao.findByParentidIsNull();//查询一级菜单，利用一级菜单父节点为空
		for (Modules m : mlist) {//循环放入一级菜单在树数据类中
			Tree t = new Tree();
			t.setId(m.getId());
			t.setTitle(m.getName());
			t.setField(m.getParentid());
			t.setPath(m.getPath());
			t.setWeight(m.getWeight());
			List<Modules> molist = mdao.findByParentid(m.getId());//利用一级菜单id查询二级菜单集合
			List<Tree> list1 = new ArrayList<Tree>();
			for (Modules mo : molist) {//循环二级菜单放入一级菜单子数据中
				Tree t1 = new Tree();
				t1.setId(mo.getId());
				t1.setTitle(mo.getName());
				t1.setField(mo.getParentid());
				t1.setPath(mo.getPath()); 
				t1.setWeight(mo.getWeight());
				list1.add(t1);
			}
			t.setChildren(list1);
			list.add(t);
		}
		return list;
	}
	
	
	/**
	 * 添加或修改模块信息
	 */
	public Integer SaveAndFlush(Modules m) {
		try {
			mdao.saveAndFlush(m);
			return 1;
		} catch (Exception e) {
			return 0;
		}
	}

	/**
	 * 删除模块信息
	 */
	public Integer DeleteModules(Integer id) {
		try {
			mdao.deleteById(id);;
			return 1;
		} catch (Exception e) {
			return 0;
		}
	}


	/**
	 * 查询select所需modules数据
	 */
	public List<Map<String, String>> GetSelAll() {
		return mdao.getSelAll();
	}


	@Override
	public List<Map<String, Object>> getUserMo(String name) {
		List<Map<String, Object>>list=mdao.getUserMo(name);
		return list;
	}




}
